package demo1;

import java.util.HashMap;
import java.util.Map;

/**
 * 办理住宿类，用于管理学生的住宿信息
 */
public class AccommodationRegistration {
    // 使用 Map 存储学生的住宿信息，键为学生姓名，值为 AccommodationInfo 对象
    private static Map<String, AccommodationInfo> accommodationInfos = new HashMap<>();
    // 住宿编号计数器，用于生成唯一的住宿编号
    private static int accommodationIdCounter = 1;

    /**
     * 住宿信息内部类，用于表示单个学生的住宿信息
     */
    static class AccommodationInfo {
        // 住宿编号
        private int accommodationId;
        // 住宿地址
        private String address;
        // 学生对象
        private StudentInfo.Student student;

        /**
         * 构造函数，用于初始化住宿信息
         * @param accommodationId 住宿编号
         * @param address 住宿地址
         * @param student 学生对象
         */
        public AccommodationInfo(int accommodationId, String address, StudentInfo.Student student) {
            this.accommodationId = accommodationId;
            this.address = address;
            this.student = student;
        }

        /**
         * 获取入住卡信息
         * @return 包含入住卡信息的字符串
         */
        public String getRoomCard() {
            return "入住卡 - 住宿编号: " + accommodationId + ", 地址: " + address + ", 学生: " + student.getName();
        }
    }

    /**
     * 学生申请入住方法
     * @param name 学生姓名
     * @param address 住宿地址
     */
    public static void applyForAccommodation(String name, String address) {
        StudentInfo.Student student = StudentInfo.getStudent(name);
        if (student != null) {
            int accommodationId = accommodationIdCounter++;
            accommodationInfos.put(name, new AccommodationInfo(accommodationId, address, student));
            System.out.println(name + " 申请入住成功");
        } else {
            System.out.println("未找到该学生信息，无法申请入住");
        }
    }

    /**
     * 学生办理入住方法
     * @param name 学生姓名
     * @return 入住卡信息，如果未找到住宿信息则返回 null
     */
    public static String checkInAccommodation(String name) {
        AccommodationInfo accommodationInfo = accommodationInfos.get(name);
        if (accommodationInfo != null) {
            System.out.println(name + " 办理入住成功");
            return accommodationInfo.getRoomCard();
        } else {
            System.out.println("未找到该学生的住宿申请信息，无法办理入住");
            return null;
        }
    }
}